 
Private Sub SuperDeconvolution2(ByVal FirstBin As Int32, _
                                    ByVal LastBin As Int32, _
                                    ByVal ArraySource() As Single, _
                                    ByRef ArrayDest() As Single, _
                                    ByRef MaxBinValue As Single, _
                                    ByRef BinWithMaxValue As Int32)

        ' -----------------------------------------------------------------------------------------
        '  SUPER DE-CONVOLUTION - TYPE 3 - indefinite number of peaks - OK tranne l'ultimo picco
        '------------------------------------------------------------------------------------------

        ' C0 C1 C2 C3
        ' -------------
        ' 00 01 02 03 | R 0
        ' 10 11 12 13 | R 1
        ' 20 21 22 23 | R 2
        ' 30 31 32 33 | R 3 

        Dim nr As Int32 = SelectedIsotopes.Length
        If nr > 0 Then
            Dim D(nr - 1, nr - 1) As Single
            Dim M(nr - 1, nr - 1) As Single
            Dim E(nr - 1) As Single
            Dim Em(nr - 2) As Single
            For i As Int32 = 0 To nr - 1
                E(i) = SelectedIsotopes(i).Energy
            Next
            For i As Int32 = 0 To nr - 2
                Em(i) = (E(i) + E(i + 1)) / 2
            Next
            Dim sigma As Single = mDeconvSize + 0.5F ' KeV
            Dim Q As Single = CSng(Math.Sqrt(2.0 * Math.PI * sigma ^ 2.0))

            For k As Int32 = 0 To nr - 2
                For j As Int32 = 0 To nr - 1
                    Dim expmj As Single = CSng(Math.Exp((-(E(k) - E(j)) ^ 2) / (2 * sigma ^ 2)))
                    D(k, j) = expmj / Q
                Next
            Next
            For j As Int32 = 0 To nr - 1
                D(nr - 1, j) = 1
            Next

            Dim Nt As Single = 0
            For i As Int32 = FirstBin To LastBin
                Nt += ArrayDest(i)
            Next

            Array.Copy(D, M, D.Length)

            Dim Det_D As Single = Determinant4(D)
            Dim N(nr - 1) As Single
            For k As Int32 = 0 To nr - 1
                ' ------------------------------------------------- replace the k column
                For j As Int32 = 0 To nr - 2
                    M(j, k) = ArrayDest(EnergyToBin(Em(j)))
                Next
                ' ------------------------------------------------- last raw element = Nt
                M(nr - 1, k) = Nt
                ' ------------------------------------------------- calc the determinant with the changed column
                N(k) = Determinant4(M) / Det_D
                ' ------------------------------------------------- restore the K column
                For j As Int32 = 0 To nr - 2
                    M(j, k) = D(j, k)
                Next
            Next

            ' ----------------------------------------------------- deconvolution verify
            'For i As Int32 = FirstBin To LastBin
            '    Dim Eii As Single = BinToEnergy(i)
            '    Dim Na As Single = 0
            '    For a As Int32 = 0 To nr - 1
            '        Dim expa As Single = CSng(Math.Exp((-(Eii - E(a)) ^ 2) / (2 * sigma ^ 2)))
            '        Na = Na + N(a) / Q * expa
            '    Next
            '    ArrayDest(i) = Na
            'Next

            ' ----------------------------------------------------- rabbit extension 
            Dim Ei As Single
            Dim Nac As Single
            Dim sigmac As Single = mGaussianSize + 0.5F ' KeV
            Dim Qc As Single = CSng(Math.Sqrt(2.0 * Math.PI * sigmac ^ 2.0))
            For i As Int32 = FirstBin To LastBin
                Ei = BinToEnergy(i)
                Nac = 0
                For a As Int32 = 0 To nr - 1
                    Dim expa As Single = CSng(Math.Exp((-(Ei - E(a)) ^ 2) / (2 * sigmac ^ 2)))
                    Nac = Nac + N(a) / Qc * expa
                Next
                ArrayDest(i) = Nac
            Next
        End If

    End Sub
